home *** CD-ROM | disk | FTP | other *** search
/ Mac Format 1994 October / Macformat17.cdr / Shareware City / Developers / MacVogl-alpha1PPC / vogl.h < prev    next >
Text File  |  1994-07-11  |  12KB  |  605 lines

  1. #define MAC
  2.  
  3. #ifdef PC    /* Stupid pox head crap */
  4. char    *vallocate();
  5. char    *malloc();
  6. #endif
  7.  
  8. /*
  9.  * VOGL is always defined if a header file is from the 
  10.  * VOGL library. In cases where you do use some VOGL
  11.  * initialisation routines like vinit, just put #ifdef VOGL...
  12.  * around.
  13.  */
  14. #ifndef VOGL
  15. #define    VOGL
  16. #endif
  17.  
  18. #ifndef TRUE
  19. #define    TRUE    1
  20. #endif
  21.  
  22. #ifndef FALSE
  23. #define    FALSE    0
  24. #endif
  25.  
  26. /*
  27.  * Misc defines...
  28.  */
  29. #define    FLAT    0
  30. #define SMOOTH    1
  31. #define GD_XPMAX 1
  32. #define GD_YPMAX 2
  33.  
  34. /*
  35.  * standard colour indices
  36.  */
  37. #define    BLACK        0
  38. #define    RED        1
  39. #define    GREEN        2
  40. #define    YELLOW        3
  41. #define    BLUE        4
  42. #define    MAGENTA        5
  43. #define    CYAN        6
  44. #define    WHITE        7
  45.  
  46. /*
  47.  * when (if ever) we need the precision
  48.  */
  49. #ifdef DOUBLE
  50. #define    double    double
  51. #endif
  52.  
  53. /*
  54.  * How to convert degrees to radians
  55.  */
  56. #define    PI    3.14159265358979
  57. #define D2R    (PI / 180.0)
  58.  
  59. /*
  60.  * miscellaneous typedefs and type defines
  61.  */
  62. typedef double    Vector[4];
  63. typedef double    Matrix[4][4];
  64. typedef double    Tensor[4][4][4];
  65. typedef short    Angle;
  66. typedef double    Coord;
  67. typedef long    Icoord;
  68. typedef short    Scoord;
  69. typedef long    Object;
  70. typedef short    Screencoord;
  71. /*typedef long    Boolean;*/
  72.  
  73. typedef unsigned short    Device;
  74.  
  75. typedef unsigned short    Colorindex;
  76.  
  77.  
  78. /*
  79.  * when register variables get us into trouble
  80.  */
  81. #ifdef NOREGISTER
  82. #define    register
  83. #endif
  84.  
  85. /*
  86.  * max number of vertices in a ploygon
  87.  */
  88. #define    MAXVERTS    128
  89.  
  90. /*
  91.  * object definitions
  92.  */
  93. #define MAXENTS        101        /* size of object table */
  94. #define    MAXTOKS        100        /* num. of tokens alloced at once in
  95.                        an object  */
  96.  
  97. /*
  98.  * Polygon fill modes for "polymode"
  99.  */
  100. #define PYM_POINT    0
  101. #define PYM_LINE    0
  102. #define PYM_FILL    1
  103. #define PYM_HOLLOW    1
  104.  
  105. /*
  106.  * functions which can appear in objects
  107.  */
  108. #define    ARC        1
  109. #define    CALLOBJ        3
  110. #define    CIRCLE        5
  111. #define    CLEAR        6
  112. #define    COLOR        7
  113. #define    DRAW        8
  114. #define    DRAWSTR        10
  115. #define    FONT        12
  116. #define    LOADMATRIX    15
  117. #define    MAPCOLOR    16
  118. #define    MOVE        17
  119. #define    MULTMATRIX    18
  120. #define    POLY        19
  121. #define    POPATTRIBUTES    22
  122. #define    POPMATRIX    23
  123. #define    POPVIEWPORT    24
  124. #define    PUSHATTRIBUTES    25
  125. #define    PUSHMATRIX    26
  126. #define    PUSHVIEWPORT    27
  127. #define    RCURVE        28
  128. #define    RPATCH        29
  129. #define    SECTOR        30
  130. #define    VIEWPORT    33
  131. #define    BACKBUFFER    34
  132. #define    FRONTBUFFER    35
  133. #define    SWAPBUFFERS    36
  134. #define    BACKFACING    37
  135. #define    TRANSLATE    38
  136. #define    ROTATE        39
  137. #define    SCALE        40
  138.  
  139. #define    ARCF        41
  140. #define    CIRCF        42
  141. #define    POLYF        43
  142. #define    RECTF        44
  143.  
  144. #define    CMOV        45
  145.  
  146. /*
  147.  * States for bgn* and end* calls
  148.  */
  149. #define    NONE        0    /* Just set current spot */
  150. #define    VPNT        1    /* Draw dots         */
  151. #define    VLINE        2    /* Draw lines         */
  152. #define    VCLINE        3    /* Draw closed lines     */
  153. #define    VPOLY        4    /* Draw a polygon      */
  154.  
  155. /*
  156.  * data types for object tokens
  157.  */
  158. typedef union tk {
  159.     int        i;
  160.     double        f;
  161. } Token;
  162.  
  163. typedef struct tls {
  164.     int        count;
  165.     Token        *toks;
  166.     struct tls    *next;
  167. } TokList;
  168.  
  169. /*
  170.  * double buffering modes.
  171.  */
  172. #define    SINGLE        1
  173.  
  174. /*
  175.  * attributes
  176.  */
  177. typedef struct {
  178.     char    backface,
  179.         mode;            /* Which mode are we in */
  180.     int     color;
  181.     double   fontheight;
  182.     double   fontwidth;
  183.     int    fontnum;
  184. } Attribute;
  185.  
  186. /*
  187.  * viewport
  188.  */
  189. typedef struct vp {
  190.     double    left;
  191.     double    right;
  192.     double    bottom;
  193.     double    top;
  194. } Viewport; 
  195.  
  196. /*
  197.  * stacks
  198.  */
  199. typedef    struct    ms {    /* Matrix stack entries    */
  200.     Matrix        m;
  201.     struct    ms    *back;
  202. } Mstack;
  203.  
  204. typedef    struct    as {    /* Attribute stack entries */
  205.     Attribute    a;
  206.     struct    as    *back;
  207. } Astack;
  208.  
  209. typedef    struct    vs {    /* Viewport stack entries */
  210.     Viewport    v;
  211.     struct    vs    *back;
  212. } Vstack;
  213.  
  214. /*
  215.  * vogle device structures
  216.  */
  217. typedef struct dev {
  218.     char    *devname;        /* name of device */
  219.     char    *large,            /* name of large font */
  220.         *small;            /* name of small font */
  221.     int    (*Vbackb)(),        /* Set drawing in back buffer */
  222.         (*Vchar)(),        /* Draw a hardware character */
  223.         (*Vcheckkey)(),        /* Ckeck if a key was hit */
  224.         (*Vclear)(),        /* Clear the screen to current color */
  225.         (*Vcolor)(),        /* Set current color */
  226.         (*Vdraw)(),        /* Draw a line */
  227.         (*Vexit)(),        /* Exit graphics */
  228.         (*Vfill)(),        /* Fill a polygon */
  229.         (*Vfont)(),        /* Set hardware font */
  230.         (*Vfrontb)(),        /* Set drawing in front buffer */
  231.         (*Vgetkey)(),        /* Wait for and get the next key hit */
  232.         (*Vinit)(),        /* Initialise the device */
  233.         (*Vlocator)(),        /* Get mouse/cross hair position */
  234.         (*Vmapcolor)(),        /* Set color indicies */
  235.         (*Vstring)(),        /* Draw a hardware string */
  236.         (*Vswapb)();        /* Swap front and back buffers */
  237. } DevEntry;
  238.  
  239. typedef struct vdev {
  240.     char        initialised,
  241.             clipoff,
  242.             inobject,
  243.             inpolygon,
  244.             fill,            /* polygon filling */
  245.             cpVvalid,        /* is the current device position valid */
  246.             inbackbuffer,        /* are we in the backbuffer */
  247.             clipplanes;        /* active clipping planes */
  248.     void        (*pmove)(),        /* Polygon moves */
  249.             (*pdraw)();        /* Polygon draws */
  250.     TokList        *tokens;        /* ptr to list of tokens for current object */
  251.     Mstack        *transmat;        /* top of transformation stack */
  252.     Astack        *attr;            /* top of attribute stack */
  253.     Vstack        *viewport;        /* top of viewport stack */
  254.     double        hheight, hwidth;    /* hardware character height, width */
  255.     Vector        cpW,            /* current postion in world coords */
  256.             cpWtrans,        /* current world coords transformed */
  257.             upvector;        /* world up */
  258.     int        depth,            /* # bit planes on screen */
  259.             maxVx, minVx,
  260.             maxVy, minVy,
  261.             sizeX, sizeY,         /* size of square on screen */
  262.             sizeSx, sizeSy,        /* side in x, side in y (# pixels) */
  263.             cpVx, cpVy;
  264.     DevEntry    dev;
  265.     double        savex,            /* Where we started for v*() */
  266.             savey,
  267.             savez;
  268.     char        bgnmode;        /* What to do with v*() calls */
  269.     char        save;            /* Do we save 1st v*() point */
  270.  
  271.     char        *wintitle;        /* window title */
  272.  
  273.     char        *devname;        /* pointer to device name */
  274.  
  275.     Matrix        tbasis, ubasis, *bases; /* Patch stuff */
  276.     
  277.     char        *enabled;        /* pointer to enabled devices mask */
  278.     int        maxfontnum;
  279.  
  280.     char        alreadyread;        /* queue device stuff */
  281.     char        kbdmode;        /* are we in keyboard mode */
  282.     char        mouseevents;        /* are mouse events enabled */
  283.     char        kbdevents;        /* are kbd events enabled */
  284.     int        devno, data;
  285.  
  286.     int        concave;        /* concave polygons? */
  287.  
  288. } VDevice;
  289.  
  290. extern VDevice    vdevice;        /* device structure */
  291.  
  292. #define    V_X    0            /* x axis in cpW */
  293. #define    V_Y    1            /* y axis in cpW */
  294. #define    V_Z    2            /* z axis in cpW */
  295. #define    V_W    3            /* w axis in cpW */
  296.  
  297. /*
  298.  * function definitions
  299.  */
  300.  
  301. /*
  302.  * arc routines
  303.  */
  304. extern void    arcprecision();
  305. extern void    circleprecision();
  306. extern void    arc();
  307. extern void    arcs();
  308. extern void    arci();
  309. extern void    arcf();
  310. extern void    arcfs();
  311. extern void    arcfi();
  312. extern void    circ();
  313. extern void    circs();
  314. extern void    circi();
  315. extern void    circf();
  316. extern void    circfs();
  317. extern void    circfi();
  318.  
  319. /*
  320.  * attr routines
  321.  */
  322. extern void    popattributes();
  323. extern void    pushattributes();
  324.  
  325. /*
  326.  * curve routines
  327.  */
  328. extern void    curvebasis();
  329. extern void    curveprecision();
  330. extern void    rcrv();
  331. extern void    crv();
  332. extern void    crvn();
  333. extern void    rcrvn();
  334. extern void    curveit();
  335.  
  336. /*
  337.  * draw routines
  338.  */
  339. extern void    draw();
  340. extern void    draws();
  341. extern void    drawi();
  342. extern void    draw2();
  343. extern void    draw2s();
  344. extern void    draw2i();
  345. extern void    rdr();
  346. extern void    rdrs();
  347. extern void    rdri();
  348. extern void    rdr2();
  349. extern void    rdr2s();
  350. extern void    rdr2i();
  351. extern void    bgnline();
  352. extern void    endline();
  353. extern void    bgnclosedline();
  354. extern void    endclosedline();
  355.  
  356. /*
  357.  * device routines
  358.  */
  359. extern void    qdevice();
  360. extern void    unqdevice();
  361. extern long    qread();
  362. extern void    qreset();
  363. extern long    qtest();
  364. extern Boolean    isqueued();
  365.  
  366. extern void    gexit();
  367. extern void    gconfig();
  368. extern void    shademodel();
  369. extern long    getgdesc();
  370. extern long    winopen();
  371. extern void    ginit();
  372. extern void    gconfig();
  373. extern long    getvaluator();
  374. extern Boolean    getbutton();
  375. extern void    clear();
  376. extern void    colorf();
  377. extern void    color();
  378. extern void    mapcolor();
  379. extern long    getplanes();
  380.  
  381. extern void    vinit();
  382. extern void    voutput();
  383. extern void    verror();
  384. extern void    vnewdev();
  385. extern char    *vgetdev();
  386.  
  387. /*
  388.  * mapping routines
  389.  */
  390. extern int    WtoVx();
  391. extern int    WtoVy();
  392. extern void    VtoWxy();
  393. extern void    CalcW2Vcoeffs();
  394.  
  395. /*
  396.  * general matrix and vector routines
  397.  */
  398. extern void    mult4x4();
  399. extern void    copymatrix();
  400. extern void    identmatrix();
  401. extern void    copytranspose();
  402.  
  403. extern void    multvector();
  404. extern void    copyvector();
  405. extern void    premultvector();
  406.  
  407. /*
  408.  * matrix stack routines
  409.  */
  410. extern void    getmatrix();
  411. extern void    popmatrix();
  412. extern void    loadmatrix();
  413. extern void    pushmatrix();
  414. extern void    multmatrix();
  415.  
  416. /*
  417.  * move routines
  418.  */
  419. extern void    move();
  420. extern void    moves();
  421. extern void    movei();
  422. extern void    move2();
  423. extern void    move2s();
  424. extern void    move2i();
  425. extern void    rmv();
  426. extern void    rmvs();
  427. extern void    rmvi();
  428. extern void    rmv2();
  429. extern void    rmv2s();
  430. extern void    rmv2i();
  431.  
  432. /*
  433.  * object routines
  434.  */
  435. extern Boolean    isobj();
  436. extern long    genobj();
  437. extern void    delobj();
  438. extern void    makeobj();
  439. extern void    callobj();
  440. extern void    closeobj();
  441. extern long    getopenobj();
  442. extern Token    *newtokens();
  443.  
  444. /*
  445.  * patch routines.
  446.  */
  447. extern void    defbasis();
  448. extern void    patchbasis();
  449. extern void    patchcurves();
  450. extern void    patchprecision();
  451. extern void    patch();
  452. extern void    rpatch();
  453.  
  454. /*
  455.  * point routines
  456.  */
  457. extern void    pnt();
  458. extern void    pnts();
  459. extern void    pnti();
  460. extern void    pnt2();
  461. extern void    pnt2s();
  462. extern void    pnt2i();
  463. extern void    bgnpoint();
  464. extern void    endpoint();
  465.  
  466. /*
  467.  * v routines
  468.  */
  469. extern void    v4f();
  470. extern void    v3f();
  471. extern void    v2f();
  472. extern void    v4d();
  473. extern void    v3d();
  474. extern void    v2d();
  475. extern void    v4i();
  476. extern void    v3i();
  477. extern void    v2i();
  478. extern void    v4s();
  479. extern void    v3s();
  480. extern void    v2s();
  481.  
  482. /*
  483.  * polygon routines.
  484.  */
  485. extern void    concave();
  486. extern void    backface();
  487. extern void    frontface();
  488. extern void    polymode();
  489. extern void    poly2();
  490. extern void    poly2i();
  491. extern void    poly2s();
  492. extern void    polyi();
  493. extern void    polys();
  494. extern void    polf2();
  495. extern void    polf2i();
  496. extern void    polf2s();
  497. extern void    polfi();
  498. extern void    polfs();
  499. extern void    poly();
  500. extern void    polf();
  501. extern void    pmv();
  502. extern void    pmvi();
  503. extern void    pmv2i();
  504. extern void    pmvs();
  505. extern void    pmv2s();
  506. extern void    pmv2();
  507. extern void    pdr();
  508. extern void    rpdr();
  509. extern void    rpdr2();
  510. extern void    rpdri();
  511. extern void    rpdr2i();
  512. extern void    rpdrs();
  513. extern void    rpdr2s();
  514. extern void    rpmv();
  515. extern void    rpmv2();
  516. extern void    rpmvi();
  517. extern void    rpmv2i();
  518. extern void    rpmvs();
  519. extern void    rpmv2s();
  520. extern void    pdri();
  521. extern void    pdr2i();
  522. extern void    pdrs();
  523. extern void    pdr2s();
  524. extern void    pdr2();
  525. extern void    pclos();
  526. extern void    bgnpolygon();
  527. extern void    endpolygon();
  528.  
  529. /*
  530.  * rectangle routines
  531.  */
  532. extern void    rect();
  533. extern void    recti();
  534. extern void    rects();
  535. extern void    rectf();
  536. extern void    rectfi();
  537. extern void    rectfs();
  538.  
  539. /*
  540.  * tensor routines
  541.  */
  542. extern void multtensor();
  543. extern void copytensor();
  544. extern void premulttensor();
  545. extern void copytensortrans();
  546.  
  547. /*
  548.  * text routines
  549.  */
  550. extern void    font();
  551. extern void    charstr();
  552. extern void    cmov();
  553. extern void    cmov2();
  554. extern void    cmovi();
  555. extern void    cmovs();
  556. extern void    cmov2i();
  557. extern void    cmov2s();
  558. extern long    getwidth();
  559. extern long    getheight();
  560.  
  561. /*
  562.  * transformation routines
  563.  */
  564. extern void    scale();
  565. extern void    translate();
  566. extern void    rotate();
  567. extern void    rot();
  568.  
  569. /*
  570.  * window definition routines
  571.  */
  572. extern void    ortho();
  573. extern void    ortho2();
  574. extern void    lookat();
  575. extern void    window();
  576. extern void    polarview();
  577. extern void    perspective();
  578.  
  579. /*
  580.  * routines for manipulating the viewport
  581.  */
  582. extern void    viewport();
  583. extern void    popviewport();
  584. extern void    pushviewport();
  585.  
  586. /*
  587.  * routines for retrieving the graphics position
  588.  */
  589. extern void    getgp();
  590. extern void    getgpos();
  591.  
  592. /*
  593.  * routines for handling the buffering
  594.  */
  595. extern void    backbuffer();
  596. extern void    frontbuffer();
  597. extern void    swapbuffers();
  598. extern void    doublebuffer();
  599.  
  600. /*
  601.  * routines for window sizing and positioning
  602.  */
  603. extern void    prefsize();
  604. extern void    prefposition();
  605.